package com.yichi.service;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

/**
 * 任务队列
 */
public class TaskDispachQueue {

    private final static String TAG = "TaskQueue";

    public static TaskDispachQueue inst = new TaskDispachQueue();
    private TaskDispachQueue() {
    }

    private final BlockingQueue<TaskMoveBean> queue = new LinkedBlockingQueue<>();

    // 添加任务到队列
    public void addTask(TaskMoveBean task) {
        try {
            queue.put(task); // 阻塞式添加任务
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }

    // 非阻塞添加（队列满时丢弃）
    public boolean addTaskNonBlocking(TaskMoveBean task) {
        boolean success = queue.offer(task); // 队列满直接返回 false
        System.out.println("任务添加" + (success ? "成功" : "失败") + "（非阻塞模式）: " + task);
        return success;
    }

    // 主动获取任务（阻塞式，队列为空时等待）
    public TaskMoveBean getTask() {
        try {
            return queue.take(); // 阻塞直到有任务
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            return null;
        }
    }

    // 主动获取任务（非阻塞，队列为空返回 null）
    public TaskMoveBean getTaskNonBlocking() {
        return queue.poll(); // 立即返回任务或 null
    }
}
